$3$ 月份的最后一篇题解了呢……明天就属于 $4$ 月了,离省选不远了…$QwQ$…
发现窝真的很制杖,我们先来聊聊刚开始窝的想法。
我画了画图,然后发现,对于最后答案的分母(不是最简),是这个序列中这些数的值(废话),然后发现了每个点的出现次数,然后线段树维护求和。发现效率很低于是试图将出现次数般到二维平面上,然后曼哈顿距离转切比雪夫距离然后二维树状数组维护然后 $WA$ 了然后弃疗。
你可能认为窝很傻对吧?
嗯对窝是挺傻的。
正解是线段树,没猜错,但是和什么二维树状数组有什么关系
我们考虑区间中的一个点 $i$ ,权值为 $v_i$ 。然后我们观察当前询问区间中有多少子区间包含了 $v_i$ ,这个个数就是点 $i$ 做出的贡献。现在我们来考虑怎么计算这个包含了 $i$ 的子区间个数。
可以发现,我们从 $i$ 向左扩展若干个点,然后又向右扩展若干个点,这样子一来就成了一个包含了 $i$ 子区间。这个就很好计算了,答案显然为 $(i-l)\times(r-i)$ 。然后还要算进没有向左/右扩展的情况,并且算上权值,最终 $i$ 造成的贡献显然为:
那么我们将式子拆开可以得到:
其中 $l,r$ 为当前询问区间,这个是可以直接算出的。我们发现我们需要维护的就是 $v_i\ ,\ v_ii\ ,\ v_ii^2$ 三个值,用线段树维护即可。
1 |
|
本文标题:【题解】 [HAOI2012]高速公路 线段树 luoguP2221
文章作者:Qiuly
发布时间:2019年03月31日 - 00:00
最后更新:2019年03月31日 - 19:16
原始链接:http://qiulyblog.github.io/2019/03/31/[题解]luoguP2221/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。